
/**
 *  安全拦截器 utils
 * @author 洪吉林
 */
const jwt = require("jsonwebtoken");
interface JWTInf{
  verify?:any,
  sign?:any,
  verifysync?:any,

}
interface ResultType{
  err?:string,
  msg?:string,
  decode?:any,
  isLogin?:boolean
}
const JWT:JWTInf ={}
/**
 * 验证权限 鉴权路由最终修改使用
 * @param token 
 * @param secretkey 秘钥
 * @param success
 * @param error
 */
JWT.verify= (token:string,secretkey:any)=>{
  let result:ResultType={}
  jwt.verify(token,secretkey,(err:any,decode:any)=>{
    if (err)  result= ({err:'error',msg:'该token已过期',isLogin:false})
    else result=({decode,msg:'解密成功',isLogin:true})
})
  return result
}
/**
 * 签名
 * @param load 载荷 json对象 存储存在
 * @param secretkey 秘钥
 * @param expiresIn 过期时间 秒
 * @returns {number | PromiseLike<ArrayBuffer>}
 */
JWT.sign =(load:any,secretkey:any,expiresIn:number):number | PromiseLike<ArrayBuffer> =>{
  let token = jwt.sign(load,secretkey,{expiresIn: expiresIn});
    return token;
}

/**异步验证 
 * 踩坑:不可在鉴权路由使用,不可异步
 * @param token
 * @param secretkey
 * @returns {Promise<any>}
 */
JWT.verifysync = (token:string,secretkey:any)=>{
    return    new Promise((resolve,reject)=>{
        jwt.verify(token,secretkey,function(err:any,decode:any){
            if (err) {
                console.log(err.message);
                resolve({err:'error',msg:'该token已过期'})
            }else{
                console.log("解密成功")
                resolve(decode)
            }
        })

    })

}
  


export default JWT


